home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / asms.arc / FFTHY1K.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-08-19  |  8.9 KB  |  599 lines

  1. ; FFT    
  2. ;    
  3. ;    SYMBOLIC NAMES FOR DATA MEMORY LOCATIONS
  4. ;
  5. XLEND:    equ 0
  6. ONE:    equ 1
  7. NT:    equ 2
  8. NH:    equ 3
  9. NQ:    equ 4
  10. M:    equ 5
  11. IT:    equ 6
  12. ID:    equ 7
  13. IR:    equ 8
  14. IU:    equ 9
  15. I:    equ 10
  16. J:    equ 11
  17. ND:    equ 12
  18. L:    equ 13
  19. XRQ:    equ 14
  20. XIQ:    equ 15
  21. XRP:    equ 16
  22. XIP:    equ 17
  23. COS:    equ 18
  24. SIN:    equ 19
  25. TEMP1:    equ 20
  26. TEMP2:    equ 21
  27. TEMP3:    equ 22
  28. TEMP4:    equ 23
  29. K:    equ 24
  30. TABPTR:    equ 25
  31. ALOCPTR:equ 26
  32. DIFF:    equ 27
  33. STACKED:equ 28
  34. DIFFS1:  equ 29
  35. DIFFS2:  equ 30
  36. XLENB:    equ 31
  37. ;
  38.     ORG 0
  39.     LACK    73        ; 73
  40.     SACL     ONE,0
  41.     OUT    ONE,7    ; tell 8088 we're starting
  42.     B    RESET1    ;RESET VECTOR
  43. ;
  44. ;
  45. ;    VECTORS
  46. ;
  47. ;    POINTERS
  48. ;
  49. XLEN:    DW    1024    ;ADDR OF FFT SIZE
  50.  
  51. TABLE:    dw  00    ; SINE TABLE
  52.         dw  0c9H
  53.         dw  0192H
  54.         dw  025bH
  55.         dw  0324H
  56.         dw  03edH
  57.         dw  04b6H
  58.         dw  057eH
  59.         dw  0647H
  60.         dw  0710H
  61.         dw  07d9H
  62.         dw  08a1H
  63.         dw  096aH
  64.         dw  0a32H
  65.         dw  0afbH
  66.         dw  0bc3H
  67.         dw  0c8bH
  68.         dw  0d53H
  69.         dw  0e1bH
  70.         dw  0ee3H
  71.         dw  0fabH
  72.         dw  01072H
  73.         dw  01139H
  74.         dw  01200H
  75.         dw  012c7H
  76.         dw  0138eH
  77.         dw  01455H
  78.         dw  0151bH
  79.         dw  015e1H
  80.         dw  016a7H
  81.         dw  0176dH
  82.         dw  01833H
  83.         dw  018f8H
  84.         dw  019bdH
  85.         dw  01a82H
  86.         dw  01b46H
  87.         dw  01c0bH
  88.         dw  01ccfH
  89.         dw  01d93H
  90.         dw  01e56H
  91.         dw  01f19H
  92.         dw  01fdcH
  93.         dw  0209fH
  94.         dw  02161H
  95.         dw  02223H
  96.         dw  022e4H
  97.         dw  023a6H
  98.         dw  02467H
  99.         dw  02527H
  100.         dw  025e7H
  101.         dw  026a7H
  102.         dw  02767H
  103.         dw  02826H
  104.         dw  028e5H
  105.         dw  029a3H
  106.         dw  02a61H
  107.         dw  02b1eH
  108.         dw  02bdbH
  109.         dw  02c98H
  110.         dw  02d54H
  111.         dw  02e10H
  112.         dw  02eccH
  113.         dw  02f86H
  114.         dw  03041H
  115.         dw  030fbH
  116.         dw  031b4H
  117.         dw  0326dH
  118.         dw  03326H
  119.         dw  033deH
  120.         dw  03496H
  121.         dw  0354dH
  122.         dw  03603H
  123.         dw  036b9H
  124.         dw  0376fH
  125.         dw  03824H
  126.         dw  038d8H
  127.         dw  0398cH
  128.         dw  03a3fH
  129.         dw  03af2H
  130.         dw  03ba4H
  131.         dw  03c56H
  132.         dw  03d07H
  133.         dw  03db7H
  134.         dw  03e67H
  135.         dw  03f16H
  136.         dw  03fc5H
  137.         dw  04073H
  138.         dw  04120H
  139.         dw  041cdH
  140.         dw  04279H
  141.         dw  04325H
  142.         dw  043d0H
  143.         dw  0447aH
  144.         dw  04523H
  145.         dw  045ccH
  146.         dw  04674H
  147.         dw  0471cH
  148.         dw  047c3H
  149.         dw  04869H
  150.         dw  0490eH
  151.         dw  049b3H
  152.         dw  04a57H
  153.         dw  04afaH
  154.         dw  04b9dH
  155.         dw  04c3fH
  156.         dw  04ce0H
  157.         dw  04d80H
  158.         dw  04e20H
  159.         dw  04ebfH
  160.         dw  04f5dH
  161.         dw  04ffaH
  162.         dw  05097H
  163.         dw  05133H
  164.         dw  051ceH
  165.         dw  05268H
  166.         dw  05301H
  167.         dw  0539aH
  168.         dw  05432H
  169.         dw  054c9H
  170.         dw  0555fH
  171.         dw  055f4H
  172.         dw  05689H
  173.         dw  0571dH
  174.         dw  057b0H
  175.         dw  05842H
  176.         dw  058d3H
  177.         dw  05963H
  178.         dw  059f3H
  179.         dw  05a81H
  180.         dw  05b0fH
  181.         dw  05b9cH
  182.         dw  05c28H
  183.         dw  05cb3H
  184.         dw  05d3dH
  185.         dw  05dc6H
  186.         dw  05e4fH
  187.         dw  05ed6H
  188.         dw  05f5dH
  189.         dw  05fe2H
  190.         dw  06067H
  191.         dw  060ebH
  192.         dw  0616eH
  193.         dw  061f0H
  194.         dw  06271H
  195.         dw  062f1H
  196.         dw  06370H
  197.         dw  063eeH
  198.         dw  0646bH
  199.         dw  064e7H
  200.         dw  06562H
  201.         dw  065ddH
  202.         dw  06656H
  203.         dw  066ceH
  204.         dw  06745H
  205.         dw  067bcH
  206.         dw  06831H
  207.         dw  068a5H
  208.         dw  06919H
  209.         dw  0698bH
  210.         dw  069fcH
  211.         dw  06a6cH
  212.         dw  06adbH
  213.         dw  06b4aH
  214.         dw  06bb7H
  215.         dw  06c23H
  216.         dw  06c8eH
  217.         dw  06cf8H
  218.         dw  06d61H
  219.         dw  06dc9H
  220.         dw  06e30H
  221.         dw  06e95H
  222.         dw  06efaH
  223.         dw  06f5eH
  224.         dw  06fc0H
  225.         dw  07022H
  226.         dw  07082H
  227.         dw  070e1H
  228.         dw  07140H
  229.         dw  0719dH
  230.         dw  071f9H
  231.         dw  07254H
  232.         dw  072aeH
  233.         dw  07306H
  234.         dw  0735eH
  235.         dw  073b5H
  236.         dw  0740aH
  237.         dw  0745eH
  238.         dw  074b1H
  239.         dw  07503H
  240.         dw  07554H
  241.         dw  075a4H
  242.         dw  075f3H
  243.         dw  07640H
  244.         dw  0768dH
  245.         dw  076d8H
  246.         dw  07722H
  247.         dw  0776bH
  248.         dw  077b3H
  249.         dw  077f9H
  250.         dw  0783fH
  251.         dw  07883H
  252.         dw  078c6H
  253.         dw  07908H
  254.         dw  07949H
  255.         dw  07989H
  256.         dw  079c7H
  257.         dw  07a04H
  258.         dw  07a41H
  259.         dw  07a7cH
  260.         dw  07ab5H
  261.         dw  07aeeH
  262.         dw  07b25H
  263.         dw  07b5cH
  264.         dw  07b91H
  265.         dw  07bc4H
  266.         dw  07bf7H
  267.         dw  07c29H
  268.         dw  07c59H
  269.         dw  07c88H
  270.         dw  07cb6H
  271.         dw  07ce2H
  272.         dw  07d0eH
  273.         dw  07d38H
  274.         dw  07d61H
  275.         dw  07d89H
  276.         dw  07db0H
  277.         dw  07dd5H
  278.         dw  07df9H
  279.         dw  07e1cH
  280.         dw  07e3eH
  281.         dw  07e5eH
  282.         dw  07e7eH
  283.         dw  07e9cH
  284.         dw  07eb9H
  285.         dw  07ed4H
  286.         dw  07eefH
  287.         dw  07f08H
  288.         dw  07f20H
  289.         dw  07f37H
  290.         dw  07f4cH
  291.         dw  07f61H
  292.         dw  07f74H
  293.         dw  07f86H
  294.         dw  07f96H
  295.         dw  07fa6H
  296.         dw  07fb4H
  297.         dw  07fc1H
  298.         dw  07fcdH
  299.         dw  07fd7H
  300.         dw  07fe0H
  301.         dw  07fe8H
  302.         dw  07fefH
  303.         dw  07ff5H
  304.         dw  07ff9H
  305.         dw  07ffcH
  306.         dw  07ffeH
  307.         dw  07fffH
  308. ;
  309. ;    PROGRAM
  310. ;
  311. RESET1:
  312.     ;Setup FFT
  313.     ldpk 0
  314.     lack xlend
  315.     sacl xlend,0
  316.     lack ONE
  317.     sacl ONE,0
  318.     lt one
  319.     mpyk 0400H
  320.     pac
  321.     sacl diff,0
  322.     mpyk 0BFFH
  323.     pac
  324.     sacl diffs2
  325.     mpyk 600H
  326.     pac
  327.     sacl diffs1
  328.     lac xlend,15
  329.     sach xlenb
  330.     lack XLEN
  331.     tblr nt
  332.     lar ar0,nt
  333.     larp 0
  334.     mar *-,0
  335.     lt 1H
  336.     zac
  337.     mpyk 0200H
  338.     pac
  339. WAIT:    larp 0
  340.     BIOZ STORE
  341.     B WAIT
  342. STORE:    IN XRQ,PA3
  343.     push
  344.     LAC XRQ,4
  345.     SUB ONE,15
  346.     SACL XRQ,0
  347.     pop
  348.     tblw XRQ
  349.     add diff,0
  350.     tblw XLEND
  351.     sub diff
  352.     add ONE,0
  353.     banz wait
  354.     B FFT
  355. ;
  356.     ORG    200H
  357. ALOC:            ; REAL PART
  358. ;
  359.     ORG    600H
  360. BLOC:            ; IMAGINARY
  361.     ORG 0A00H
  362. ; Data stored do fft
  363.  
  364. FFT:    LACK    1
  365.     SACL     ONE,0
  366.     LT     ONE
  367.     MPYK    XLEN
  368.     PAC
  369.     TBLR    XLEND
  370.     LAC    XLEND,0
  371.     SUB    ONE,0
  372.     SACL    NT,0
  373.     LAC    XLEND,15
  374.     SACH    NH,0
  375.     LAC    XLEND,14
  376.     SACH    NQ,0
  377.     ;
  378.     ;    POINTER INITIALIZATION
  379.     LT    ONE
  380.     MPYK    TABLE
  381.     PAC
  382.     SACL    TABPTR,0    ; TABLE PTR
  383.     MPYK    ALOC
  384.     PAC
  385.     SACL    ALOCPTR,0        ; REALS PTR
  386.     MPYK    BLOC
  387.     PAC    
  388.     SUB    ALOCPTR,0
  389.     SACL    DIFF,0        ; BLOC - ALOC
  390.     ;
  391.     ;    BITREV
  392.     ;
  393.     ZAC
  394.     SACL    I,0
  395.     SACL    J,0
  396. LAB0:    ZALS    NT
  397.     SUB    ONE,1
  398.     SUB    I,0
  399.     BLZ    LAB03
  400.         ZALS    J
  401.         SUB    I,0
  402.         BLEZ    LAB01
  403.             LAC    ALOCPTR,0
  404.             ADD    J,0
  405.             TBLR    TEMP1
  406.             ADD    DIFF,0
  407.             TBLR    TEMP3
  408.             LAC    ALOCPTR,0
  409.             ADD    I,0
  410.             TBLR    TEMP2
  411.             ADD    DIFF,0
  412.             TBLR    TEMP4
  413.             LAC    ALOCPTR,0
  414.             ADD    J,0
  415.             TBLW    TEMP2
  416.             ADD    DIFF,0
  417.             TBLW    TEMP4
  418.             LAC    ALOCPTR,0
  419.             ADD    I,0
  420.             TBLW    TEMP1
  421.             ADD    DIFF,0
  422.             TBLW    TEMP3
  423. LAB01:        LAC    NH,0
  424.         SACL    K,0
  425. LAB02:        LAC    J,0
  426.         SUB    K,0
  427.         BLZ    LAB025    
  428.             SACL    J,0
  429.             LAC    K,15
  430.             SACH    K,0
  431.             B    LAB02
  432. LAB025:        LAC    J,0
  433.         ADD    K,0
  434.         SACL    J,0
  435.     ZALS    I
  436.     ADD    ONE,0
  437.     SACL    I,0
  438.     B    LAB0
  439. LAB03:
  440.     ;
  441.     ;
  442.     ZAC
  443.     SACL    M,0
  444.     SACL    IT,0
  445.     LACK    1
  446.     SACL    ID,0
  447.     SACL    IR,0
  448.  
  449.     LAC    NQ,1
  450.     SACL    IU,0
  451.  
  452. BEGIN:
  453.     LAC    ID,0
  454.     SACL    I,0
  455.     ADD    ID,0
  456.     SACL    ID,0
  457.     ZAC
  458.     SACL    J,0
  459.  
  460. LAB1:
  461.     LAC    I,0
  462.     SUB    J,0
  463.     BLEZ    LAB5
  464.     LAC     TABPTR,0
  465.     ADD    M,0
  466.     TBLR    SIN
  467.     LAC    TABPTR,0
  468.     ADD    NQ,0
  469.     SUB    M,0
  470.     TBLR    COS
  471.     LAC    J,0
  472.     SUB    IR,0
  473.     BLZ    LAB2
  474.     LAC    M,0
  475.     SUB    IT,0
  476.     SACL    M,0
  477.     ZAC
  478.     SUB    COS,0
  479.     SACL    COS,0
  480.     B    LAB3
  481.  
  482. LAB2:
  483.     LAC    M,0
  484.     ADD    IT,0
  485.     SACL    M,0
  486.  
  487. LAB3:
  488.     LAC    J,0
  489.     SACL    ND,0
  490.  
  491. LAB4:
  492.     LAC    NT,0
  493.     SUB    ND,0
  494.     BLZ    LAB45
  495.     LAC    I,0
  496.     ADD    ND,0
  497.     SACL    L,0
  498.     LAC    ALOCPTR,0
  499.     ADD    L,0
  500.     TBLR    XRQ
  501.     ADD    DIFF,0            
  502.     TBLR    XIQ
  503.     LAC    ALOCPTR,0
  504.     ADD    ND,0
  505.     TBLR    XRP
  506.     ADD    DIFF,0            
  507.     TBLR    XIP
  508.     ;
  509.     ; BUTTERFLY
  510.     ;
  511.     ZAC
  512.     LT    COS
  513.     MPY     XRQ
  514.     LTA    SIN
  515.     MPY    XIQ
  516.     LTA    COS    
  517.     SACH    TEMP1,0
  518.     ZAC
  519.     MPY    XIQ
  520.     LTA    SIN
  521.     MPY    XRQ
  522.     SPAC
  523.     SACH    TEMP2,0
  524.     ;
  525.     LAC    XRP,14
  526.     ADD    TEMP1,15
  527.     SACH    XRP,1
  528.     SUBH    TEMP1
  529.     SACH    XRQ,1
  530.  
  531.     LAC    XIP,14
  532.     ADD    TEMP2,15
  533.     SACH    XIP,1
  534.     SUBH    TEMP2
  535.     SACH    XIQ,1
  536.     ;
  537.     ;    END OF BUTTERFLY
  538.     ;
  539.     LAC    ALOCPTR,0
  540.     ADD    L,0
  541.     TBLW    XRQ
  542.     ADD    DIFF,0
  543.     TBLW     XIQ
  544.     LAC    ALOCPTR,0
  545.     ADD    ND,0
  546.     TBLW    XRP
  547.     ADD    DIFF,0            
  548.     TBLW    XIP
  549.  
  550.     LAC    ND,0
  551.     ADD    ID,0
  552.     SACL    ND,0
  553.     B    LAB4
  554.  
  555. LAB45:
  556.     LAC    J,0
  557.     ADD    ONE,0
  558.     SACL    J,0
  559.     B    LAB1
  560.  
  561. LAB5:
  562.     LAC    I,0
  563.     SACL    IR,0
  564.     LAC    IU,15
  565.     SACH    IU,0
  566.     SACH    IT,0
  567. LAB6:
  568.     LAC    NH,0
  569.     SUB    I,0
  570.     BGZ    BEGIN
  571. SPECT:    larp 0
  572.     lar 0,xlenb
  573.     mar *-,0
  574.     lac alocptr,0
  575. PICK1:    tblr TEMP1
  576.     add DIFF,0
  577.     tblr temp2
  578.     push
  579.     zac
  580.     lt temp1
  581.     mpy temp1
  582.     lta temp2
  583.     mpy temp2
  584.     apac
  585.     sach temp1
  586.     sacl temp2
  587.     pop
  588.     add diffs1
  589.     tblw temp1
  590.     add one,9
  591.     tblw temp2
  592.     sub diffs2
  593.     banz pick1
  594. STOP:    LACK    58H        ; 88
  595.     SACL     ONE,0
  596.     OUT    ONE,7    ; tell 8088 we're done
  597. LOOP:    B    LOOP
  598.  
  599.